package excel;

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.data.ImageData;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.util.FileUtils;
import com.alibaba.excel.util.ListUtils;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class ImageExport {
    public static void main(String[] args) {

        String fileName = "imageWrite" + System.currentTimeMillis() + ".xlsx";

        // 这里注意下 所有的图片都会放到内存 暂时没有很好的解法，大量图片的情况下建议 2选1:
        // 1. 将图片上传到oss 或者其他存储网站: https://www.aliyun.com/product/oss ，然后直接放链接
        // 2. 使用: https://github.com/coobird/thumbnailator 或者其他工具压缩图片

        try {
            List<ImageDemoData> list = ListUtils.newArrayList();
            ImageDemoData imageDemoData = new ImageDemoData();
            list.add(imageDemoData);

            // 这里演示
            // 需要额外放入文字
            // 而且需要放入2个图片
            // 第一个图片靠左
            // 第二个靠右 而且要额外的占用他后面的单元格
            WriteCellData<Void> writeCellData = new WriteCellData<>();
            imageDemoData.setWriteCellDataFile(writeCellData);
            // 这里可以设置为 EMPTY 则代表不需要其他数据了
            writeCellData.setType(CellDataTypeEnum.STRING);
            writeCellData.setStringValue(" ");


            // 可以放入多个图片
            List<ImageData> imageDataList = new ArrayList<>();
            for (int n = 0; n < 4; n++) {
                // 放入第n个图片
                String imagePath = "D:\\gitee2\\learn-java\\src\\main\\java\\excel\\pic\\" + (n + 1) + ".jpg";
                ImageData imageData = new ImageData();
                imageDataList.add(imageData);
                writeCellData.setImageDataList(imageDataList);
                imageData.setImage(FileUtils.readFileToByteArray(new File(imagePath)));
                imageData.setImageType(ImageData.ImageType.PICTURE_TYPE_PNG);

                int top = 5;
                int bottom = 5;
                int left = 100 * n;
                int right = 500 - 100 * n;

                imageData.setTop(top);
                imageData.setBottom(bottom);
                imageData.setLeft(left);
                imageData.setRight(right);
            }

            // 写入数据
            EasyExcel.write(fileName, ImageDemoData.class).sheet().doWrite(list);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}
